import {DroneBatteryModeEnum, DroneBatteryStateEnum, LinkWorkModeEnum} from './../types/airport-tsa'
import {DeviceInfoType} from '/@/types/device'
import {
    DeviceCmd,
    DeviceCmdExecuteInfo,
    DeviceCmdExecuteStatus,
    DeviceCmdItem,
    DeviceCmdStatusText
} from '/@/types/device-cmd'
import {
    AirportStorage,
    AlarmModeEnum,
    BatteryStoreModeEnum,
    ChargeStateEnum,
    CoverStateEnum,
    PutterStateEnum,
    SupplementLightStateEnum
} from '/@/types/airport-tsa'
import {getBytesObject} from './bytes'
import {DEFAULT_PLACEHOLDER} from './constants'

/**
 * 根据osd 更新信息
 * @param cmdList
 * @param deviceInfo
 * @returns
 */
export function updateDeviceCmdInfoByOsd(cmdList: DeviceCmdItem[], deviceInfo: DeviceInfoType) {
    const {device, dock, gateway} = deviceInfo || {}
    if (!cmdList || cmdList.length < 1) {
        return
    }
    cmdList.forEach(cmdItem => {
        if (cmdItem.loading) {
            return
        }
        if (cmdItem.cmdKey === DeviceCmd.DeviceReboot) { // 重启
            // console.log('DeviceReboot')
        } else if (cmdItem.cmdKey === DeviceCmd.DroneOpen || cmdItem.cmdKey === DeviceCmd.DroneClose) { // 飞行器开关机
            getDroneState(cmdItem, device)
        } else if (cmdItem.cmdKey === DeviceCmd.CoverOpen || cmdItem.cmdKey === DeviceCmd.CoverClose) { // 舱盖开关
            getCoverState(cmdItem, dock)
        } else if (cmdItem.cmdKey === DeviceCmd.PutterOpen || cmdItem.cmdKey === DeviceCmd.PutterClose) { // 推杆闭合展开
            getPutterState(cmdItem, dock)
        } else if (cmdItem.cmdKey === DeviceCmd.ChargeOpen || cmdItem.cmdKey === DeviceCmd.ChargeClose) { // 充电状态
            getChargeState(cmdItem, dock)
        } else if (cmdItem.cmdKey === DeviceCmd.DeviceFormat) { // 机场存储
            deviceFormat(cmdItem, dock)
        } else if (cmdItem.cmdKey === DeviceCmd.DroneFormat) { // 飞行器存储
            droneFormat(cmdItem, device)
        } else if (cmdItem.cmdKey === DeviceCmd.SupplementLightOpen || cmdItem.cmdKey === DeviceCmd.SupplementLightClose) { // 补光灯开关
            getSupplementLightState(cmdItem, dock)
        } else if (cmdItem.cmdKey === DeviceCmd.AlarmStateSwitch) { // 声光报警
            getAlarmState(cmdItem, dock)
        } else if (cmdItem.cmdKey === DeviceCmd.BatteryStoreModeSwitch) { // 电池保养
            getBatteryStoreMode(cmdItem, dock)
        } else if (cmdItem.cmdKey === DeviceCmd.DroneBatteryModeSwitch) { // 飞行器电池保养
            getDroneBatteryMode(cmdItem, dock)
        } else if (cmdItem.cmdKey === DeviceCmd.SdrWorkModeSwitch) { // 增强图传开关
            getSdrWorkNode(cmdItem, dock)
        }
    })
}

// 飞行器开关机
function getDroneState(cmdItem: DeviceCmdItem, droneProperties: any) {
    if (!droneProperties) {
        cmdItem.status = DeviceCmdStatusText.DroneStatusCloseNormalText
        cmdItem.operateText = DeviceCmdStatusText.DroneStatusCloseBtnText
        if (cmdItem.cmdKey !== DeviceCmd.DroneOpen) {
            exchangeDeviceCmd(cmdItem)
        }
    } else {
        cmdItem.status = DeviceCmdStatusText.DroneStatusOpenNormalText
        cmdItem.operateText = DeviceCmdStatusText.DroneStatusOpenBtnText
        if (cmdItem.cmdKey !== DeviceCmd.DroneClose) {
            exchangeDeviceCmd(cmdItem)
        }
    }
}

// 舱盖开关
function getCoverState(cmdItem: DeviceCmdItem, airportProperties: any) {
    const coverState = airportProperties?.basic_osd?.cover_state as CoverStateEnum

    if (coverState === CoverStateEnum.Close || coverState === CoverStateEnum.Failed) {
        cmdItem.status = DeviceCmdStatusText.DeviceCoverCloseNormalText
        cmdItem.operateText = DeviceCmdStatusText.DeviceCoverCloseBtnText
        if (cmdItem.cmdKey !== DeviceCmd.CoverOpen) {
            exchangeDeviceCmd(cmdItem)
        }
    } else if (coverState === CoverStateEnum.Open || coverState === CoverStateEnum.HalfOpen) {
        cmdItem.status = DeviceCmdStatusText.DeviceCoverOpenNormalText
        cmdItem.operateText = DeviceCmdStatusText.DeviceCoverOpenBtnText
        if (cmdItem.cmdKey !== DeviceCmd.CoverClose) {
            exchangeDeviceCmd(cmdItem)
        }
    }
}

// 推杆状态
function getPutterState(cmdItem: DeviceCmdItem, airportProperties: any) {
    const putterState = airportProperties?.basic_osd?.putter_state as PutterStateEnum
    if (putterState === PutterStateEnum.Close || putterState === PutterStateEnum.Failed) {
        cmdItem.status = DeviceCmdStatusText.DevicePutterCloseNormalText
        cmdItem.operateText = DeviceCmdStatusText.DevicePutterCloseBtnText
        if (cmdItem.cmdKey !== DeviceCmd.PutterOpen) {
            exchangeDeviceCmd(cmdItem)
        }
    } else if (putterState === PutterStateEnum.Open || putterState === PutterStateEnum.HalfOpen) {
        cmdItem.status = DeviceCmdStatusText.DevicePutterOpenNormalText
        cmdItem.operateText = DeviceCmdStatusText.DevicePutterOpenBtnText
        if (cmdItem.cmdKey !== DeviceCmd.PutterClose) {
            exchangeDeviceCmd(cmdItem)
        }
    }
}

// 充电状态
function getChargeState(cmdItem: DeviceCmdItem, airportProperties: any) {
    const chargeState = airportProperties?.basic_osd?.drone_charge_state
    const state = chargeState?.state as ChargeStateEnum
    if (!state) return
    if (state === ChargeStateEnum.Charge) {
        cmdItem.status = DeviceCmdStatusText.DeviceChargeOpenNormalText
        cmdItem.operateText = DeviceCmdStatusText.DeviceChargeOpenBtnText
        if (cmdItem.cmdKey !== DeviceCmd.ChargeClose) {
            exchangeDeviceCmd(cmdItem)
        }
    } else if (state === ChargeStateEnum.NotCharge) {
        cmdItem.status = DeviceCmdStatusText.DeviceChargeCloseNormalText
        cmdItem.operateText = DeviceCmdStatusText.DeviceChargeCloseBtnText
        if (cmdItem.cmdKey !== DeviceCmd.ChargeOpen) {
            exchangeDeviceCmd(cmdItem)
        }
    }
}

// 机场存储格式化
function deviceFormat(cmdItem: DeviceCmdItem, airportProperties: any) {
    const airportStorage = airportProperties?.basic_osd?.storage
    const value = getAirportStorage(airportStorage)
    cmdItem.status = value
}

// 机场存储格式化
function droneFormat(cmdItem: DeviceCmdItem, droneProperties: any) {
    const droneStorage = droneProperties?.storage
    const value = getAirportStorage(droneStorage)
    cmdItem.status = value
}

// 获取机场存储容量
// {
// "total": 10000, // 单位：KB
// "used": 500
// }
export function getAirportStorage(storage: AirportStorage) {
    if (!storage) {
        return DEFAULT_PLACEHOLDER
    }
    const total = storage.total
    const used = storage.used
    const byteObj = getBytesObject(total * 1024)
    const _total = byteObj.value
    const _used = getBytes(used * 1024, byteObj.index)
    return `${_used}/${_total} ${byteObj.size}`
}

function getBytes(bytes: number, index: number, fixed = 1) {
    return (bytes / Math.pow(1024, index)).toFixed(fixed)
}

// 补光灯状态
function getSupplementLightState(cmdItem: DeviceCmdItem, airportProperties: any) {
    const supplementLightState = airportProperties?.basic_osd?.supplement_light_state
    if (supplementLightState === SupplementLightStateEnum.Close) {
        cmdItem.operateText = DeviceCmdStatusText.DeviceSupplementLightCloseBtnText
        cmdItem.status = DeviceCmdStatusText.DeviceSupplementLightCloseNormalText
        if (cmdItem.cmdKey !== DeviceCmd.SupplementLightOpen) {
            exchangeDeviceCmd(cmdItem)
        }
    } else if (supplementLightState === SupplementLightStateEnum.Open) {
        cmdItem.operateText = DeviceCmdStatusText.DeviceSupplementLightOpenBtnText
        cmdItem.status = DeviceCmdStatusText.DeviceSupplementLightOpenNormalText
        if (cmdItem.cmdKey !== DeviceCmd.SupplementLightClose) {
            exchangeDeviceCmd(cmdItem)
        }
    }
}

// 声光报警
function getAlarmState(cmdItem: DeviceCmdItem, airportProperties: any) {
    const alarmState = airportProperties?.basic_osd?.alarm_state
    if (alarmState === AlarmModeEnum.CLOSE) {
        cmdItem.operateText = DeviceCmdStatusText.AlarmStateCloseBtnText
        cmdItem.status = DeviceCmdStatusText.AlarmStateCloseNormalText
        cmdItem.action = AlarmModeEnum.OPEN
    } else if (alarmState === AlarmModeEnum.OPEN) {
        cmdItem.operateText = DeviceCmdStatusText.AlarmStateOpenBtnText
        cmdItem.status = DeviceCmdStatusText.AlarmStateOpenNormalText
        cmdItem.action = AlarmModeEnum.CLOSE
    }
}

// 机场电池模式
function getBatteryStoreMode(cmdItem: DeviceCmdItem, airportProperties: any) {
    const batteryStoreMode = airportProperties?.basic_osd?.battery_store_mode
    if (batteryStoreMode === BatteryStoreModeEnum.BATTERY_PLAN_STORE) {
        cmdItem.operateText = DeviceCmdStatusText.BatteryStoreModePlanBtnText
        cmdItem.status = DeviceCmdStatusText.BatteryStoreModePlanNormalText
        cmdItem.action = BatteryStoreModeEnum.BATTERY_EMERGENCY_STORE
    } else if (batteryStoreMode === BatteryStoreModeEnum.BATTERY_EMERGENCY_STORE) {
        cmdItem.operateText = DeviceCmdStatusText.BatteryStoreModeEmergencyBtnText
        cmdItem.status = DeviceCmdStatusText.BatteryStoreModeEmergencyNormalText
        cmdItem.action = BatteryStoreModeEnum.BATTERY_PLAN_STORE
    }
}

// 飞行器电池保养
function getDroneBatteryMode(cmdItem: DeviceCmdItem, airportProperties: any) {
    const maintenanceState = airportProperties?.work_osd?.drone_battery_maintenance_info?.maintenance_state
    if (maintenanceState === DroneBatteryStateEnum.MaintenanceInProgress) {
        cmdItem.operateText = DeviceCmdStatusText.DroneBatteryModeCloseBtnText
        cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceInProgressText
        cmdItem.action = DroneBatteryModeEnum.CLOSE
        cmdItem.disabled = false
    } else if (maintenanceState === DroneBatteryStateEnum.NoMaintenanceRequired) {
        cmdItem.operateText = DeviceCmdStatusText.DroneBatteryModeOpenBtnText
        cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNotNeedText
        cmdItem.action = DroneBatteryModeEnum.OPEN
        cmdItem.disabled = true
    } else if (maintenanceState === DroneBatteryStateEnum.MaintenanceRequired) {
        cmdItem.operateText = DeviceCmdStatusText.DroneBatteryModeOpenBtnText
        cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNeedText
        cmdItem.action = DroneBatteryModeEnum.OPEN
        cmdItem.disabled = false
    }
}

// 增强图传开关
function getSdrWorkNode(cmdItem: DeviceCmdItem, airportProperties: any) {
    const linkWorkMode = airportProperties?.link_osd?.wireless_link?.link_workmode
    if (linkWorkMode === LinkWorkModeEnum.SDR) {
        cmdItem.operateText = DeviceCmdStatusText.SdrWorkModeFourCloseBtnText
        cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGCloseNormalText
        cmdItem.action = LinkWorkModeEnum.FourG_FUSION_MODE
    } else if (linkWorkMode === LinkWorkModeEnum.FourG_FUSION_MODE) {
        cmdItem.operateText = DeviceCmdStatusText.SdrWorkModeFourGOpenBtnText
        cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGOpenNormalText
        cmdItem.action = LinkWorkModeEnum.SDR
    }
}

/**
 * 交换指令
 * @param cmd
 */
function exchangeDeviceCmd(cmdItem: DeviceCmdItem) {
    if (cmdItem.oppositeCmdKey) {
        const oppositeCmdKey = cmdItem.oppositeCmdKey
        cmdItem.oppositeCmdKey = cmdItem.cmdKey
        cmdItem.cmdKey = oppositeCmdKey
    }
}

// /**
//  * 更新简单指令发送情况更新信息
//  * @param cmd
//  */
// export function updateDeviceSingleCmdInfo (cmdItem: DeviceCmdItem) {
//   // 补光灯
//   if (cmdItem.cmdKey === DeviceCmd.SupplementLightOpen) {
//     cmdItem.status = DeviceCmdStatusText.DeviceSupplementLightOpenNormalText
//     cmdItem.operateText = DeviceCmdStatusText.DeviceSupplementLightOpenBtnText
//     exchangeDeviceCmd(cmdItem)
//   } else if (cmdItem.cmdKey === DeviceCmd.SupplementLightClose) {
//     cmdItem.status = DeviceCmdStatusText.DeviceSupplementLightCloseNormalText
//     cmdItem.operateText = DeviceCmdStatusText.DeviceSupplementLightCloseBtnText
//     exchangeDeviceCmd(cmdItem)
//   }
// }

/**
 * 根据指令执行消息更新信息
 * @param cmd
 * @param deviceCmdExecuteInfo
 * @returns
 */
export function updateDeviceCmdInfoByExecuteInfo(cmdList: DeviceCmdItem[], deviceCmdExecuteInfos?: DeviceCmdExecuteInfo[]) {
    if (!deviceCmdExecuteInfos || !cmdList) {
        return
    }
    cmdList.forEach(cmdItem => {
        // 获取当前设备相应指令信息
        const deviceCmdExecuteInfo = deviceCmdExecuteInfos.find(cmdExecuteInfo => cmdExecuteInfo.biz_code === cmdItem.cmdKey)
        if (deviceCmdExecuteInfo) {
            if (cmdItem.cmdKey === DeviceCmd.DeviceReboot) { // 重启
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DeviceRebootInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DeviceRebootFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.status = DeviceCmdStatusText.DeviceRebootNormalText
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.DroneOpen) { // 飞行器开关机
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DroneStatusOpenInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DroneStatusOpenFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.status = DeviceCmdStatusText.DroneStatusOpenNormalText
                    cmdItem.operateText = DeviceCmdStatusText.DroneStatusOpenBtnText
                    exchangeDeviceCmd(cmdItem)
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.DroneClose) {
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DroneStatusCloseInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DroneStatusCloseFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.status = DeviceCmdStatusText.DroneStatusCloseNormalText
                    cmdItem.operateText = DeviceCmdStatusText.DroneStatusCloseBtnText
                    exchangeDeviceCmd(cmdItem)
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.CoverOpen) { // 舱盖开关
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DeviceCoverOpenInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DeviceCoverOpenFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.status = DeviceCmdStatusText.DeviceCoverOpenNormalText
                    cmdItem.operateText = DeviceCmdStatusText.DeviceCoverOpenBtnText
                    exchangeDeviceCmd(cmdItem)
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.CoverClose) {
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DeviceCoverCloseInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DeviceCoverCloseFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.status = DeviceCmdStatusText.DeviceCoverCloseNormalText
                    cmdItem.operateText = DeviceCmdStatusText.DeviceCoverCloseBtnText
                    exchangeDeviceCmd(cmdItem)
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.PutterOpen) { // 推杆闭合展开
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DevicePutterOpenInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DevicePutterOpenFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.status = DeviceCmdStatusText.DevicePutterOpenNormalText
                    cmdItem.operateText = DeviceCmdStatusText.DevicePutterOpenBtnText
                    exchangeDeviceCmd(cmdItem)
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.PutterClose) {
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DevicePutterCloseInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DevicePutterCloseFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.status = DeviceCmdStatusText.DevicePutterCloseNormalText
                    cmdItem.operateText = DeviceCmdStatusText.DevicePutterCloseBtnText
                    exchangeDeviceCmd(cmdItem)
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.ChargeOpen) { // 充电状态
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DeviceChargeOpenInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DeviceChargeOpenFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.status = DeviceCmdStatusText.DeviceChargeOpenNormalText
                    cmdItem.operateText = DeviceCmdStatusText.DeviceChargeOpenBtnText
                    exchangeDeviceCmd(cmdItem)
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.ChargeClose) {
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DeviceChargeCloseInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DeviceChargeCloseFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.status = DeviceCmdStatusText.DeviceChargeCloseNormalText
                    cmdItem.operateText = DeviceCmdStatusText.DeviceChargeCloseBtnText
                    exchangeDeviceCmd(cmdItem)
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.DeviceFormat) { // 机场存储
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DeviceFormatInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DeviceFormatFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.DroneFormat) { // 飞行器存储
                if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                    cmdItem.status = DeviceCmdStatusText.DroneFormatInProgressText
                    cmdItem.loading = true
                } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                    cmdItem.status = DeviceCmdStatusText.DroneFormatFailedText
                    cmdItem.loading = false
                } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                    cmdItem.loading = false
                }
            } else if (cmdItem.cmdKey === DeviceCmd.AlarmStateSwitch) { // 机场声光报警
                if (cmdItem.action === AlarmModeEnum.CLOSE) {
                    if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                        cmdItem.status = DeviceCmdStatusText.AlarmStateCloseText
                        cmdItem.loading = true
                    } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                        cmdItem.status = DeviceCmdStatusText.AlarmStateCloseFailedText
                        cmdItem.loading = false
                    } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                        cmdItem.loading = false
                    }
                } else if (cmdItem.action === AlarmModeEnum.OPEN) {
                    if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                        cmdItem.status = DeviceCmdStatusText.AlarmStateOpenText
                        cmdItem.loading = true
                    } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                        cmdItem.status = DeviceCmdStatusText.AlarmStateOpenFailedText
                        cmdItem.loading = false
                    } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                        cmdItem.loading = false
                    }
                }
            } else if (cmdItem.cmdKey === DeviceCmd.BatteryStoreModeSwitch) { // 电池保养
                if (cmdItem.action === BatteryStoreModeEnum.BATTERY_PLAN_STORE) {
                    if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                        cmdItem.status = DeviceCmdStatusText.BatteryStoreModePlanText
                        cmdItem.loading = true
                    } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                        cmdItem.status = DeviceCmdStatusText.BatteryStoreModePlanFailedText
                        cmdItem.loading = false
                    } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                        cmdItem.loading = false
                    }
                } else if (cmdItem.action === BatteryStoreModeEnum.BATTERY_EMERGENCY_STORE) {
                    if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                        cmdItem.status = DeviceCmdStatusText.BatteryStoreModeEmergencyText
                        cmdItem.loading = true
                    } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                        cmdItem.status = DeviceCmdStatusText.BatteryStoreModeEmergencyFailedText
                        cmdItem.loading = false
                    } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                        cmdItem.loading = false
                    }
                }
            } else if (cmdItem.cmdKey === DeviceCmd.DroneBatteryModeSwitch) { // 飞行器电池保养
                if (cmdItem.action === DroneBatteryModeEnum.OPEN) {
                    if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                        cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceInProgressText
                        cmdItem.loading = true
                    } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                        cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNeedText
                        cmdItem.loading = false
                    } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                        cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNotNeedText
                        cmdItem.loading = false
                    }
                } else if (cmdItem.action === DroneBatteryModeEnum.CLOSE) {
                    if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                        cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceInProgressText
                        cmdItem.loading = true
                    } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                        cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceInProgressText
                        cmdItem.loading = false
                    } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                        cmdItem.status = DeviceCmdStatusText.DroneBatteryModeMaintenanceNeedText
                        cmdItem.loading = false
                    }
                }
            } else if (cmdItem.cmdKey === DeviceCmd.SdrWorkModeSwitch) { // 增强图传
                if (cmdItem.action === LinkWorkModeEnum.SDR) { // 关闭
                    if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                        cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGCloseText
                        cmdItem.loading = true
                    } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                        cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGCloseFailedText
                        cmdItem.loading = false
                    } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                        cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGCloseNormalText
                        cmdItem.loading = false
                    }
                } else if (cmdItem.action === LinkWorkModeEnum.FourG_FUSION_MODE) { // 开启
                    if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.InProgress) {
                        cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGOpenText
                        cmdItem.loading = true
                    } else if (isExecuteFailed(deviceCmdExecuteInfo.output.status)) {
                        cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGOpenFailedText
                        cmdItem.loading = false
                    } else if (deviceCmdExecuteInfo.output.status === DeviceCmdExecuteStatus.OK) {
                        cmdItem.status = DeviceCmdStatusText.SdrWorkModeFourGOpenNormalText
                        cmdItem.loading = false
                    }
                }
            }
        }
    })
}

/**
 * 判断是否执行失败
 * @param status
 * @returns
 */
function isExecuteFailed(status: DeviceCmdExecuteStatus) {
    return [DeviceCmdExecuteStatus.Canceled, DeviceCmdExecuteStatus.Failed, DeviceCmdExecuteStatus.Timeout].includes(status)
}
